ASP.NET MVC 传值方法ViewData与ViewBag的区别 |
您所在的位置:网站首页 › aspnet mvc与aspnet的区别 › ASP.NET MVC 传值方法ViewData与ViewBag的区别 |
一、介绍
在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下:
ViewData ViewBag 它是Key/Value字典集合 它是dynamic类型对像 从Asp.net MVC 1 就有了 ASP.NET MVC3 才有 基于Asp.net 3.5 framework 基于Asp.net 4.0与.net framework ViewData比ViewBag快 ViewBag比ViewData慢 在ViewPage中查询数据时需要转换合适的类型 在ViewPage中查询数据时不需要类型转换 有一些类型转换代码 可读性更好 二、使用说明 1、在Controllers中设置值 1 public ActionResult Index() 2 { 3 ViewBag.name = "webapi"; //设置值 4 ViewData["name"] = "webapi"; //设置值 5 return View(); 6 } 2、在Views中获取值 1 @{ 2 ViewBag.Title = "asp.net mvc"; 3 } 4 测试 5 6 @ViewBag.name 7 8 @ViewData["name"] 三、对比 通过定义我们可以看出ViewBag 是ViewData的动态封装器,相当于在ViewData的基础上进行了封装处理 ViewData与ViewBag的区别 1、ViewData是字典类型,赋值方式用字典方式,通过key值读取对应的value,ViewData["myName"]2、ViewBag是动态类型,使用时直接添加属性赋值即可ViewBag.myName3、ViewBag和ViewData只在当前Action中有效,等同于View4、ViewData和ViewBag中的值可以互相访问,因为ViewBag的实现中包含了ViewData 注意: 1,只有当要访问的关键字是一个有效的C#标识符时,ViewBag 才起作用。 例如,如果在ViewData["Key With Spaces"]中存放一个值,那么就不能使用ViewBag访问。因为这样根本就无法通过编译。2,动态值不能作为一个参数传递给扩展方法。因为C#编译器为了选择正确的扩展方法,在编译时必须知道每一个参数的真正类型。如果其中任何一个参数是动态的,那么就不会通过编译。例如,这行代码就会编译失败:@Html.TextBox("name",ViewBag.Name)。要使这行代码通过编译有两种方法:第一是使用ViewData["Name"],第二是把ViewBag.Name值转换为一个具体的型:(string)ViewBag.Name |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |